package com.turing.common.util;

import com.turing.common.response.CommonCode;
import com.turing.common.response.ResponseVO;
import com.turing.common.response.ResultCode;

/**
 * @Description 响应结果工具类
 * @Author lcy
 * @Date 2020/12/7 11:17
 */
public class ResponseUtil {

    /**
     * 创建返回消息对象
     *
     * @param code    响应码
     * @param message 返回提示
     * @param status  返回状态
     * @return com.lcy.study.base.common.ResponseVO.ResponseVO<Object>
     * @author lcy
     * @date 2020/12/7 14:32
     **/
    public static <T> ResponseVO<T> create(String code, String message, int status) {
        return ResponseVO.<T>builder().status(status).code(code).message(message).build();
    }

    /**
     * 创建返回消息对象
     *
     * @param code    响应码
     * @param message 返回提示
     * @param status  返回状态
     * @param data    响应数据
     * @return com.lcy.study.base.common.ResponseVO.ResponseVO<T>
     * @author lcy
     * @date 2020/12/7 14:38
     **/
    public static <T> ResponseVO<T> create(String code, String message, int status, T data) {
        return ResponseVO.<T>builder().status(status).code(code).message(message).data(data).build();
    }

    /**
     * 创建返回消息对象
     *
     * @param resultCode 枚举对象
     * @return com.lcy.study.base.common.ResponseVO.ResponseVO<T>
     * @author lcy
     * @date 2020/12/7 14:38
     **/
    public static <T> ResponseVO<T> create(ResultCode resultCode) {
        return ResponseVO.<T>builder().status(resultCode.getStatus()).code(resultCode.getCode()).message(resultCode.getMessage()).build();
    }

    /**
     * 创建返回消息对象
     *
     * @param resultCode 枚举对象
     * @param data       数据集合
     * @return com.lcy.study.base.common.ResponseVO.ResponseVO<T>
     * @author lcy
     * @date 2020/12/7 14:38
     **/
    public static <T> ResponseVO<T> create(ResultCode resultCode, T data) {
        return ResponseVO.<T>builder().status(resultCode.getStatus()).code(resultCode.getCode()).message(resultCode.getMessage()).data(data).build();
    }

    /**
     * 创建返回消息对象
     *
     * @param data 返回数据
     * @return com.lcy.study.base.common.ResponseVO.ResponseVO<T>
     * @author lcy
     * @date 2020/12/7 14:38
     **/
    public static <T> ResponseVO<T> create(T data) {
        return ResponseVO.<T>builder().status(CommonCode.SUCCESS.getStatus()).code(CommonCode.SUCCESS.getCode()).message(CommonCode.SUCCESS.getMessage()).data(data).build();
    }

    /**
     * 返回成功的消息对象
     *
     * @return com.lcy.study.base.common.ResponseVO.ResponseVO<Object>
     * @author lcy
     * @date 2020/12/7 14:55
     **/
    public static <T> ResponseVO<T> success() {
        return create(CommonCode.SUCCESS);
    }

    /**
     * 返回带数据的成功消息对象
     *
     * @param data 返回数据
     * @return com.lcy.project.entity.ResponseVO.ResponseVO<T>
     * @author lcy
     * @date 2020/4/10 16:15
     **/
    public static <T> ResponseVO<T> success(T data) {
        return create(data);
    }

    /**
     * 返回成功的消息对象
     *
     * @param message 返回消息
     * @return com.lcy.study.base.common.ResponseVO.ResponseVO<Object>
     * @author lcy
     * @date 2020/12/7 14:55
     **/
    public static <T> ResponseVO<T> failed(String message) {
        return ResponseVO.<T>builder().status(0).code("601").message(message).build();
    }

    /**
     * 返回成功的消息对象
     *
     * @param code    返回编码
     * @param message 返回消息
     * @return com.lcy.study.base.common.ResponseVO.ResponseVO<Object>
     * @author lcy
     * @date 2020/12/7 14:55
     **/
    public static <T> ResponseVO<T> failed(String code, String message) {
        return ResponseVO.<T>builder().status(0).code(code).message(message).build();
    }

    /**
     * 返回系统异常的信息
     *
     * @return com.lcy.project.entity.com.ResponseVO.ResponseVO
     * @author lcy
     * @date 2020/4/10 16:16
     **/
    public static <T> ResponseVO<T> exception() {
        return create(CommonCode.SERVER_EXCEPTION);
    }

    /**
     * 返回系统错误的信息
     *
     * @return com.lcy.project.entity.com.ResponseVO.ResponseVO
     * @author lcy
     * @date 2020/4/10 16:16
     **/
    public static <T> ResponseVO<T> error() {
        return create(CommonCode.SERVER_EXCEPTION);
    }

}
